/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beancomentarios;

import java.util.Calendar;

/**
 * Clase que guarda un comentario y su fecha de creación
 * @author Miguel González - Ceura
 */
public class Comentario implements Comparable {
    private String fecha;
    private String comentario;
    
    /**
     * Construye un comentario y establece la fecha actual de sisteme
     * @param comentario Texto del comentario
     */
    public Comentario(String comentario) {
        this.comentario = comentario;
        
        Calendar cal = Calendar.getInstance();
        fecha = cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" +
                cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY)
                + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND);
    }
    
    /**
     * Construye un comentario
     * @param comentario Texto del comentario
     * @param fecha Fecha del comentario
     */
    public Comentario(String comentario, String fecha) {
        this.comentario = comentario;
        this.fecha = fecha;
    }
    
    /**
     * Devuelve el texto del comentario
     * @return String comentario
     */
    public String getTexto() {
        return comentario;
    }
    
    /**
     * Devuelve la fecha del comentario
     * @return String fecha
     */
    public String getFecha() {
        return fecha;
    }

    /**
     * Compara un comentario con otro
     * @param comentario Objeto comentario
     * @return Devuelve verdad si el texto y la fecha coinciden, sino falso
     */
    @Override
    public boolean equals(Object comentario) {
        if(comentario != null) {
            if(comentario instanceof Comentario) {
                if(fecha.equals(((Comentario)comentario).getFecha()) &&
                        this.comentario.equals(((Comentario)comentario).
                        getTexto())) {
                    return true;
                }
            }
        }
        
        return false;
    }
    
    /**
     * Devuelve el hashCode del comentario
     * @return int hashCode
     */
    @Override
    public int hashCode() {
        int result = 7;
        
        result*= 31 * fecha.hashCode();
        result*= 31 * comentario.hashCode();
        
        return result;
    }

    /**
     * Compara un comentario con otro por fecha
     * @param comentario Recibe un comentario
     * @return Devuelve 0 si la fecha es igual, -1 si el comentario que se recibe
     * es mayor y si es menor 1
     */
    @Override
    public int compareTo(Object comentario) {        
        if(comentario != null) {
            if(comentario instanceof Comentario) {
                String f1 = fecha;
                String f2 = ((Comentario)comentario).getFecha();
                
                if(getCalendar(f1).compareTo(getCalendar(f2)) == 0) {
                    return 0;
                } else if(getCalendar(f1).compareTo(getCalendar(f2)) < 0) {
                    return -1;
                } else {
                    return 1;
                }
            }
        }
        
        return 0;
    }
    
    /**
     * Obtiene un objeto calendar con la fecha del comentario
     * @param fecha Fecha del comentario
     * @return Calendar calendar
     */
    private Calendar getCalendar(String fecha) {
        Calendar calendar = Calendar.getInstance();
        
        String[] divisor = fecha.split(" ");
        String[] f1 = divisor[0].split("/");
        String[] f2 = divisor[1].split(":");
        
        calendar.set(Calendar.YEAR, Integer.parseInt(f1[2]));
        calendar.set(Calendar.MONTH, Integer.parseInt(f1[1]));
        calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(f1[0]));
        
        calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(f2[0]));
        calendar.set(Calendar.MINUTE, Integer.parseInt(f2[1]));
        calendar.set(Calendar.SECOND, Integer.parseInt(f2[2]));
        return calendar;
    }
}
